package com.xbongbong.paas.enums;

import com.xbongbong.i18n.util.I18nMessageUtil;
import com.xbongbong.paas.enums.clazz.PatternClass;
import java.util.ArrayList;
import java.util.List;

/**
 * @author: wufeng
 * @date: 2018/8/20 14:50
 * @desrcption: 正则枚举类
 */
public enum PatternEnum {

    /**
     * 没有正则
     */
    NONE(0, "none", "enum.pattern.desc.none", "", ""),

    /**
     * 手机正则表达式
     * 移动：134、135、136、137、138、139、150、151、157(TD)、158、159、187、188
     * 	    联通：130、131、132、152、155、156、185、186
     * 	    电信：133、153、180、189、（1349卫通）
     * 	    网络电话: 17
     * 	    总结起来就是第一位必定为1，第二位必定为3或5或7或8，其他位置的可以为0-9, 区号为86可不填
     *
     * 	    香港号码：区号为00852或852 香港手机号码是5/6/9开头的8位数字的号码,座机是2/3开头的8位数的号码
     *
     * 	    台湾号码:区号为00886或886 台湾手机10位数，皆以09起头，拨打台湾手机，先拨台湾的国际区码00886，接着拨去起头0的手机号码，譬如0960XXXXXX，则拨00886-960XXXXXX
     *
     */
    MOBILE(1, "mobile", "enum.pattern.desc.mobile", "(^(86)?[1][3456789]\\d{9}$)|(^(00852|852)[569]\\d{7}$)|(^(00886|886)0?[9]\\d{8}$)", "enum.pattern.msg.mobile"),

    /**
      第一种：0开头2位数字-8位数字-分机号
      第二种：0开头3位数字-7位数字或者8位数字-分机号
      注：上述两种分机号可填可不填
     */
    PHONE(2, "phone", "enum.pattern.desc.phone", "^(0\\d{2}-\\d{8}(-\\d{1,4})?)$|^(0\\d{3}-\\d{7,8}(-\\d{1,4})?)$", "enum.pattern.msg.phone"),
    /**
      1到9开头，后五位0到9
     */
    POSTCODE(3, "postcode", "enum.pattern.desc.postcode", "^[0-9][0-9]{5}$", "enum.pattern.msg.postcode"),
    /**
      第一种：15位数字或者
      第二种：18位数字或者
      第三种：前面17位数字最后一位为X或x
     */
    CARDNO(4, "cardno", "enum.pattern.desc.cardno", "(^\\d{15}$)|(^\\d{18}$)|(^\\d{17}(\\d|X|x)$)", "enum.pattern.msg.cardno"),
    /**
     @之前由大小写字母或者数字或者.或者_或者-组成@之后.之前由大小写字母或者数字或者.或者_或者-组成.之后由两个或者三个的字母组成
     */
    EMAIL(5, "email", "enum.pattern.desc.email", "^([a-zA-Z0-9_-]+\\.?)+@[a-zA-Z0-9_-]+(\\.[a-zA-Z0-9_-]+)+$", "enum.pattern.msg.email"),

    URL(6, "url", "enum.pattern.desc.url", "^(https?|ftp|file)://[-a-zA-Z0-9+&@#/%?=~_|!:,.;]*[-a-zA-Z0-9+&@#/%=~_|]","enum.pattern.msg.url");
    /**
     * 类型
     */
    private Integer type;
    /**
     * 英文描述
     */
    private String alias;
    /**
     * 描述
     */
    private String desc;
    /**
     * 正则
     */
    private String pattern;
    /**
     * 提示文案
     */
    private String msg;


    /**
     * 枚举类
     * @param type
     * @param pattern
     * @param msg
     */
    PatternEnum(Integer type,String alias, String desc, String pattern, String msg){
        this.type = type;
        this.alias = alias;
        this.desc = desc;
        this.pattern = pattern;
        this.msg = msg;
    }
    /**
     * 获取描述
     * @param type
     * @return java.lang.String
     * @author zcp
     * @date 2019/6/30 21:15
     * @since v1.0
     * @version v1.0
     */
    public static String getPatternDesc(Integer type){
        for (PatternEnum cache: values()){
            if(cache.getType().equals(type)){
                return cache.desc;
            }
        }
        return null;
    }

    public Integer getType() {
        return type;
    }

    public void setType(Integer type) {
        this.type = type;
    }

    public String getAlias() {
        return alias;
    }

    public void setAlias(String alias) {
        this.alias = alias;
    }

    public String getDesc() {
        return I18nMessageUtil.getMessage(desc);
    }

    public void setDesc(String desc) {
        this.desc = desc;
    }

    public String getPattern() {
        return pattern;
    }

    public void setPattern(String pattern) {
        this.pattern = pattern;
    }

    public String getMsg() {
        return I18nMessageUtil.getMessage(msg);
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public static List<PatternClass> list(){
        List<PatternClass> list = new ArrayList<>();
        for (PatternEnum p : values()) {
            PatternClass patternClass = new PatternClass();
            patternClass.setDesc(p.getDesc());
            patternClass.setMsg(p.getMsg());
            patternClass.setType(p.getType());
            patternClass.setAlias(p.getAlias());
            patternClass.setPattern(p.getPattern());
            list.add(patternClass);
        }
        return list;
    }
}
